/*
* INSANE - Interactive Structural Analysis Environment
*
* Copyright (C) 2003-2005
* Universidade Federal de Minas Gerais
* Escola de Engenharia
* Departamento de Engenharia de Estruturas
* 
* Author's email :    insane@dees.ufmg.br
* Author's website :  http://www.dees.ufmg.br/insane
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package br.ufmg.dees.insane.ui.rich.full.command;

import java.util.ArrayList;
import java.util.ListIterator;

import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;

import br.ufmg.dees.insane.commons.command.Command;
import br.ufmg.dees.insane.commons.controller.Controller;
import br.ufmg.dees.insane.model.geo.GCubicCurve;
import br.ufmg.dees.insane.model.geo.GLine;
import br.ufmg.dees.insane.model.geo.GPoint;
import br.ufmg.dees.insane.model.geo.GQuadCurve;
import br.ufmg.dees.insane.ui.rich.full.InsaneInternalInterface;
import br.ufmg.dees.insane.ui.rich.full.controller.MeshingController;

/** The AddPartPrimit command.
 *
 * @author Fonseca, Flavio & Pitangueira, Roque
 * @since February 2004
 */
public class AddPartPrimitCommand implements Command, Cloneable {
    
    private InsaneInternalInterface parent;
    private Controller controller;
	
//*****************************************************************************
	
    /** Constructor method. */
    public AddPartPrimitCommand(JInternalFrame parent) {
		this.parent = (InsaneInternalInterface)parent;
		controller = this.parent.getController();
	}
	
//*****************************************************************************
	
	/** Execute method. */
    public void execute() {
		String parts;
		int nParts;
		Command mappingCmd = new MappingCommand(parent);
		
		ArrayList primitives = ((MeshingController)controller).getSelection();
		if ( primitives.size() > 0 ) {
			
			try {
				parts = JOptionPane.showInputDialog(parent.getResourceBundle().getString("cmPartPrimitives1"));
				nParts = Integer.parseInt( parts );
			} catch (Exception e) {
				nParts = 0;
			}
			
			ListIterator sels = primitives.listIterator();
			while(sels.hasNext()) {
				Object obj = sels.next();
				if (obj instanceof GCubicCurve) {
					GCubicCurve o = (GCubicCurve)obj;
					o.setNParts(nParts);
				}
				if (obj instanceof GQuadCurve) {
					GQuadCurve o = (GQuadCurve)obj;
					o.setNParts(nParts);
				}
				if (obj instanceof GLine) {
					GLine o = (GLine)obj;
					o.setNParts(nParts);
				}
				if (obj instanceof GPoint) {
					GPoint o = (GPoint)obj;
					o.setNParts(nParts);
				}
			}
			
			parent.addOutputText(parent.getResourceBundle().getString("cmPartPrimitives2") + " " + nParts + " " + parent.getResourceBundle().getString("cmPartPrimitives3"));
			parent.addOutputText(parent.getResourceBundle().getString("cmPartPrimitives4"));
		}else{
			parent.addOutputText(parent.getResourceBundle().getString("cmPartPrimitives4"));
		}
		
		mappingCmd.execute();
		controller.unSelectAll();
		parent.getDrawing().repaint();
	}
	
//*****************************************************************************
	
	/** Impossible to undo - Not implemented. */
    public void undo() {}
    
//*****************************************************************************
	
	/** Impossible to redo - Not implemented. */
    public void redo() {}
	
//*****************************************************************************
}

